home *** CD-ROM | disk | FTP | other *** search
/ Chip 1996 November / Chip 11-96.iso / treiber / grafik / datapat / twinor64 / win3x / blackole / bhdemofx.c_ / bhdemofx.c
C/C++ Source or Header  |  1994-11-25  |  7KB  |  198 lines

  1. /* ========================================================================== */
  2. /* ==             Black Holes for Windows Effects DLL Demo                 == */
  3. /* ==                                                                      == */
  4. /* ==   (c) Datapath UK Ltd, Derby.                                        == */
  5. /* ==   Last modified : July 1994                                          == */
  6. /* ==                                                                      == */
  7. /* ==   A 'simple' warp effect, which just changes the cursor to an arrow  == */
  8. /* ==   pointing in the general direction of the exit hole, and moves      == */
  9. /* ==   the cursor in a straight line.                                     == */
  10. /* ==                                                                      == */
  11. /* ==   Effect is currently not configurable - could be altered so that    == */
  12. /* ==   the DELAY_TIME comes from the config data, which could be altered  == */
  13. /* ==   be altered by the user.                                            == */
  14. /* ==                                                                      == */
  15. /* ==   NB : Since this is a very simple example, many of the parameters   == */
  16. /* ==        in each routine is not used, and will probably produce many   == */
  17. /* ==            'Parameter 'xxxxxx' is never used'                        == */
  18. /* ==        type messages when compiled.                                  == */
  19. /* ==        Your compiler may provide methods (eg compiler switches, or   == */
  20. /* ==        #pragma directives) to prevent these messages.                == */
  21. /* ========================================================================== */
  22.  
  23. #include <string.h>
  24.  
  25. #include "bheffect.h"
  26.  
  27. #define DELAY_TIME 1000
  28.  
  29. static HINSTANCE FXInstance;
  30.  
  31. /*----------------------------------------------------------------------------*/
  32.  
  33. static void CALLBACK move_cursor_line_dda (int xpos, int ypos, LPARAM delay)
  34. {
  35.    int i;
  36.     SetCursorPos (xpos, ypos);
  37.    /* Wait for a while */
  38.     for (i = 0; i < delay; i++);
  39. }
  40.  
  41.  
  42. /* ========================================================================== */
  43. /* == Simple effect -                                                      == */
  44. /* ==   has four cursors (diagonal arrows pointing NE, SE, SW & NW)        == */
  45. /* ==   just moves cursor in straight line from entry to exit hole, no     == */
  46. /* ==  'begin_effect' or 'end_effect'                                      == */
  47. /* ========================================================================== */
  48.  
  49. #define POINTER_EFFECT "Simple Pointer"
  50.  
  51. void pointer_begin_effect (PTWarpPoints  wdata, HWND hwnd, TConfigData config, LPDWORD user_data )
  52. {
  53.    /* do nothing for this particular effect */
  54. }
  55.  
  56. void pointer_do_effect (PTWarpPoints  wdata, HWND hwnd, TConfigData config, LPDWORD user_data)
  57. {
  58.     LineDDA (wdata->start.x, wdata->start.y,
  59.                 wdata->end.x,   wdata->end.y,  move_cursor_line_dda, DELAY_TIME);
  60. }
  61.  
  62. void pointer_end_effect (PTWarpPoints  wdata, HWND hwnd, TConfigData config, LPDWORD user_data)
  63. {
  64.    // do nothing for this particular effect
  65. }
  66.  
  67. unsigned short pointer_load_cursor (HCURSOR FAR *cursors)
  68. {
  69.    /* 8 arrows, pointing N, NE, E, SE, S, SW, W & NW respectively */
  70.    cursors [0] = LoadCursor (FXInstance, "ARROW_U");
  71.     cursors [1] = LoadCursor (FXInstance, "ARROW_TR");
  72.    cursors [2] = LoadCursor (FXInstance, "ARROW_R");
  73.     cursors [3] = LoadCursor (FXInstance, "ARROW_BR");
  74.    cursors [4] = LoadCursor (FXInstance, "ARROW_D");
  75.     cursors [5] = LoadCursor (FXInstance, "ARROW_BL");
  76.    cursors [6] = LoadCursor (FXInstance, "ARROW_L");
  77.     cursors [7] = LoadCursor (FXInstance, "ARROW_TL");
  78.    return (8);
  79. }
  80.  
  81. unsigned short pointer_select_cursor (PTWarpPoints pts)
  82. {
  83.    /* select cursor which points in general direction of exit hole   */
  84.    /* from the entry hole                                            */
  85.    int delta_x, delta_y;
  86.    delta_x = pts->end.x - pts->start.x;
  87.    if (delta_x == 0) delta_x = 1;
  88.    delta_y = pts->end.y - pts->start.y;
  89.    if (delta_y == 0) delta_y = 1;
  90.  
  91.    if ((delta_x >= 0) && (delta_y >= 0))
  92.    {
  93.       if ((delta_y / delta_x) > 4)
  94.          return (4);
  95.       else if ((delta_x / delta_y) > 4)
  96.          return (2);
  97.       else
  98.          return (3);
  99.    }
  100.    else if ((delta_x >= 0) && (delta_y < 0))
  101.    {
  102.       if ((-delta_y / delta_x) > 4)
  103.          return (0);
  104.       else if ( (-delta_x / delta_y) > 4)
  105.          return (2);
  106.       else
  107.          return (1);
  108.    }
  109.    else if ((delta_x < 0) && (delta_y < 0))
  110.    {
  111.       if ((delta_y / delta_x) > 4)
  112.          return (0);
  113.       else if ((delta_x / delta_y) > 4)
  114.          return (6);
  115.       else
  116.          return (7);
  117.    }
  118.    else /* delta_y >= 0 && delta_x < 0 */
  119.    {
  120.       if ((-delta_y / delta_x) > 4)
  121.          return (4);
  122.       else if ((-delta_x / delta_y) > 4)
  123.          return (6);
  124.       else
  125.          return (5);
  126.    }
  127. }
  128.  
  129. void pointer_initialise(void)
  130. {
  131.    /* do nothing in this particular effect */
  132. }
  133.  
  134. void pointer_free(void)
  135. {
  136.    /* do nothing in this particular effect */
  137. }
  138.  
  139. void pointer_details (PTBHEffectDetails details)
  140. {
  141.     strcpy (details->effect_name, POINTER_EFFECT );
  142.    details->is_configurable  = FALSE;
  143.    details->init_config_data = 0;
  144.    details->Configure        = NULL;
  145.    details->BeginEffect      = pointer_begin_effect;
  146.    details->DoEffect         = pointer_do_effect;
  147.    details->EndEffect        = pointer_end_effect;
  148.    details->LoadCursors      = pointer_load_cursor;
  149.    details->SelectCursor     = pointer_select_cursor;
  150.    details->InitialiseEffect = pointer_initialise;
  151.    details->FreeEffect       = pointer_free;
  152.    details->number_of_cursors = 8;
  153. }
  154.  
  155.  
  156. /* ========================================================================== */
  157. /* == Get number of warp effects exported from this DLL                    == */
  158. /* ========================================================================== */
  159. unsigned short CALLBACK EXPORT_FN BHGetNumberOfEffects (void)
  160. {
  161.    return (1);
  162. }
  163.  
  164. /* ========================================================================== */
  165. /* == Get effects details -                                                == */
  166. /* ==      details points to an array of TBHEffectDetails large enough for == */
  167. /* ==      the number of effects given by BHGetNumberOfEffects             == */
  168. /* ========================================================================== */
  169.  
  170. void CALLBACK EXPORT_FN BHGetEffectsDetails(PTBHEffectDetails details)
  171. {
  172.    // Simple effect
  173.    pointer_details (&details[0]);
  174. }
  175.  
  176.  
  177. /* ========================================================================== */
  178. /* ==  LibMain function for DLL entry point                                == */
  179. /* ========================================================================== */
  180.  
  181. int FAR PASCAL LibMain (HINSTANCE  hInstance, WORD wDataSeg,
  182.                                 WORD cbHeapSize, char FAR * cmdLine)
  183. {
  184.    FXInstance = hInstance;
  185.     return (1);
  186. }
  187.  
  188. /* ========================================================================== */
  189. /* ==  Windows Exit Procedure                                              == */
  190. /* ========================================================================== */
  191.  
  192. int FAR PASCAL WEP (int nParameter)
  193. {
  194.    return (1);
  195. }
  196.  
  197.  
  198.